SiteAdmin 기능 구현을 완료했다.
SiteAdmin 테이블을 추가했다. (site, user, dateInserted, (site, user) 복합 PK, Site/User FK)SiteAdmin 모델/DAO를 추가했다. (exists, selectBySite, selectByUser, insert, delete)AdminLogic.isSiteAdmin을 추가했다. 전체 관리자(AdminLogic.SuperAdminUserSeq)는 모든 사이트의 SiteAdmin으로 취급한다. 그 판정이 무엇이고 왜 role 테이블이 아닌지는 AccessControl 참고.isSiteAdmin 기준으로 정리했다. 단 SiteAdmin 목록 관리(/api/Admin/Site/:seq/Admins, withAdminSite)와 사이트 정보 수정(PUT /api/Admin/Site/:seq)은 전체 관리자만 쓸 수 있다./Admin/Site/:seq/Admins)/Admin/Site/:seq/... 직접 접근은 URL의 site seq 기준으로 권한을 검사하도록 보강했다.npm.cmd run admin:build 성공sbt compile 성공sbt "testOnly com.aha00a.models.tables.SiteAdminSpec com.aha00a.logics.AdminLogicSpec com.aha00a.controllers.ApiSiteAdminSpec" 성공ApiSiteAdminSpec 에 SiteTheme 조회와 2026-09-15 의 캐시 삭제·Vim 캐시 삭제 권한 테스트가 더해져, 2026-09-15 에 같은 명령은 31개를 돈다 — SiteAdminSpec 10 + AdminLogicSpec 3 + ApiSiteAdminSpec 18)Similar pages by cosine similarity. Words after page name are term frequency.